package middleware

//import (
//	"net/http"
//	"regexp"
//	"strings"
//
//	"github.com/gin-gonic/gin"
//)
//
//// 违禁词列表，实际应用中可能从配置或数据库加载
//var forbiddenWords = []string{
//	"暴力", "反动", "赌博", "毒品",
//}
//
//// 编译违禁词正则表达式
//var forbiddenRegex *regexp.Regexp
//
//func init() {
//	// 构建正则表达式，匹配任何违禁词
//	pattern := "(?i)" + strings.Join(forbiddenWords, "|")
//	forbiddenRegex = regexp.MustCompile(pattern)
//}
//
//// CheckForbiddenWords 检查视频文件名中的违禁词
//func CheckForbiddenWords() gin.HandlerFunc {
//	return func(c *gin.Context) {
//		// 从请求中获取文件名
//		var req struct {
//			FileName string `json:"file_name"`
//		}
//
//		if err := c.ShouldBindJSON(&req); err == nil && req.FileName != "" {
//			// 检查文件名是否包含违禁词
//			if forbiddenRegex.MatchString(req.FileName) {
//				c.JSON(http.StatusBadRequest, gin.H{
//					"success": false,
//					"message": "文件名包含不适当内容",
//				})
//				c.Abort() // 终止请求处理链
//				return
//			}
//		}
//		// 继续处理请求
//		c.Next()
//	}
//}

// 在Gin中注册中间件的示例：
// router := gin.Default()
// videoGroup := router.Group("/api/videos")
// videoGroup.Use(middleware.CheckForbiddenWords())
// {
//     videoGroup.POST("/upload", videoHandler.Upload)
// }

import (
	"net/http"
	"strconv"
	"strings"

	"github.com/gin-gonic/gin"
)

// 违禁词列表
var forbiddenWords = []string{
	"暴力", "反动", "赌博", "毒品",
}

// ContentSecurityMiddleware 内容安全检查中间件
func ContentSecurityMiddleware() gin.HandlerFunc {
	return func(c *gin.Context) {
		// 获取上传的文件名
		filename := c.Request.FormValue("filename")
		if filename == "" {
			filename = c.Query("filename")
		}

		if filename != "" {
			// 检查文件名中的违禁词
			lowerFilename := strings.ToLower(filename)
			for word := range forbiddenWords {
				if strings.Contains(lowerFilename,
					strings.ToLower(strconv.Itoa(word))) {
					c.JSON(http.StatusBadRequest, gin.H{
						"success": false,
						"message": "文件名包含不适当内容",
					})
					c.Abort()
					return
				}
			}
		}
		// 继续处理请求
		c.Next()
	}
}

//在Gin路由中使用中间件：
//// 注册包含内容安全中间件的路由
//func SetupUploadRoutes(router *gin.Engine, uploadHandler *api.UploadHandler) {
//	uploadGroup := router.Group("/api/v1/upload")
//	uploadGroup.Use(middleware.ContentSecurityMiddleware()) // 应用中间件
//	{
//		uploadGroup.POST("/video", uploadHandler.UploadVideoHandler)
//	}
//}
